Get multiple domains working again
Signed-off-by Kevin Tian <kevin.tian@intel.com>
Some interesting issues found related to two small patches:
1. Only "xm console 1" and "Ctrl + ]" can make xenU forward progress,
and however still failed to connect blkback later.
[Reason] Previous event injection on XEN/IPF only set vIRR bit
when evtchn_set_pending. However with the latest xenlinux code, it's
possible for xenlinux to set pending indication and selector when
unmasking some pending event channel. This path has nothing to do with
vIRR bit.
[Solution] We should check event pending every time when
checking pending interrupts before returning to guest.
2. After fixing first issue, nested event is injected when first event
is still in handle with lock held. Then dead lock happens at end of
"xend start".
[Reason] Due to same logic as above, xenlinux may set pending
indication and re-trigger pending event by force_evtchn_callback. On
x86, this stub just does a dummy xen_version hypercall and pending event
will be injected back when leaving hypervisor. However on IA64,
force_evtchn_callback is incautiously made invoking evtchn_interrupt()
directly, while the former may be called with lock held.
[Solution] Just let force_evtchn_callback as empty for simple now.
Merge vcpu phase 2
Signed-off-by Anthony Xu <Anthony.xu@intel.com>
1. Add r4,r5,r6,r7,eml_unat,rfi_pfs six members at the end of pt_regs,
thus VMM for non-VT domain doesn't need to save/restore SWITCH_STACK
just in case VMM may need modify guest r4,r5,r6,r7 value, eml_unat is saved
in case VMM may need modify guest unat, rfi_pfs is used to emulate guest rfi
instruction for VT domain, and is used as dummy member for alignment of F6,
F7 etc. in pt_regs for non-VT domain. And add code to save/restore r4,r5,r6,
r7,eml_unat in minstate.h and entry.s for non-VT domain. and remove code to
save/restore SWITCH_STACK in ivt.S for non-VT domain.
2. Originally guest banked registers of VT domain are saved directly in VPD. Now
Guest banked registers of VT domain are saved to pt_regs at the entry of VMM,
just for consistence with non-VT domain, vmx_vcpu_bsw0 and vmx_vcpu_bsw1 are
rewriten for accomodating this change.
3. After above changes, all guest registers and nat bits are saved at same place
both for VTI domain and for non-VTI domain, so vcpu_get/set_gr and rse_get/set_gr
are merged, and all these functions can handle guest nats.
4. Merged vcpu_bsw0 and vcpu_bsw1, Now VMM used vgr[16],vbgr[16],vnat,vbnat in mapped_regs_t
struct (is also vpd) to emuate guest banking switch operation.
5. Removed some CONFIG_VTIs and cleaned up some unused structure members and codes.
Note: Credit accidentally omitted from merge vcpu phase 1, included here:
This patch is based on ver 6723. And definitely I can boot dom0 with this patch.
Following things are done in this patch.
1. Merge structure pt_reg.
2. Though vcpu_info structure has been merged, non-vt domain used pointer
vcpu->vcpu_info->arch.privregs, and vt domain used pointer
vcpu->arch.arch_vmx.vpd, the value of these two pointers are different,
that means vt and non-vt domain still use different privileged registers
pages, in this case, we can't merge vcpu.c, so I merged these two pointer,
and put it at vcpu->arch.privregs. vcpu->vcpu_info->arch.privregs and
vcpu->arch.arch_vmx.vpd will not exist. Why put it at vcpu->arch.privregs?
1. There will be one less pointer unreferenced when accessing this
privileged registers page.
2. vcpu->vcpu_info can be accessed by guest, but guest can't access
privileged registers page through this address, guest can access
this privileged page only through another special mapping. So there
is no need to expose this pointer to guest by putting it in
vcpu->vcpu_info structure. All accesses to this page is through
VCPU(vcpu,y) macro,
3. Merged following functions.
Vcpu_set/get_(interruption control registers from cr16 to cr25),
corresponding functions vmx_vcpu_set/get_*** will not exist.
Vcpu->arch.arch_vmx.in_service[4] will not exist, we will all use
vcpu->arch.insvc[4]
4. Cleaned up some unused structure members and codes.
Re-enable improved PAL code (time and perfmon work again). PAL code remapped
_lazily_ only when PAL called after rr7 changes. Old PAL emulator can
be re-enabled with #define USE_PAL_EMULATOR in config.h.
Signed-off by: Dan Magenheimer <dan.magenheimer@hp.com>
This patch fixes a severe bug in vtlb, where domU may face machine crash
intermittently. Normally in page fault handler, the entry hit in vtlb shouldn't
be injected back to vtlb again, not to say meaningless -1UL. After this fix,
vtlb hit ratio also improves since guest svhpt entry may live longer.
Rename xm commands and cleanup of the "bogus" argument code.
For the "bogus" argument code, avoid changing the argument list so
that errors can be reported consistently. Signed-off-by: Dan Smith <danms@us.ibm.com> Signed-off-by: Christian Limpach <Christian.Limpach@cl.cam.ac.uk>
During my attempts to get the latest bridge networking model working on my
system, I often invoked 'network-bridge stop' with total failure. Attached
is an updated version that works.
Signed-off-by: Andrew Theurer <habanero@us.ibm.com>
Call dominfo.device_delete instead of non-existant dominfo.device_destroy. Signed-off-by: Sean Dague <sean@dague.net> Signed-off-by: Christian Limpach <Christian.Limpach@cl.cam.ac.uk>
mem-map.sxp and vmxloader are unaffected by a 64-bit build,
and belong in /usr/lib always (never /usr/lib64). qemu-dm
continues to live under /usr/lib64 on 64-bit systems.
Modify the vmx config script to auto-detect correct path
to qemu-dm, rather than staically configuring at compile
time.
Fix xenstored watch crash.
When a connection blocked waiting on a transaction, don't queue watch events.
Sure, they'd be ignored and re-transmitted, but it hits an assert that we don't
send data out blocked connections, and it's wasteful. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (authored) Signed-off-by: Christian Limpach <Christian.Limpach@cl.cam.ac.uk>
Switch to IntroduceDomain, move xend info into xend subdirectory in store.
Also switch store/console event channel and page reference store
entries over to xstransact. Signed-off-by: Christian Limpach <Christian.Limpach@cl.cam.ac.uk>
Move xshandle to xsutil.py, add IntroduceDomain, fix list to handle empty/non-existant directories and fix Remove. Signed-off-by: Christian Limpach <Christian.Limpach@cl.cam.ac.uk>
Added isDevControllerClass so that XendDomainInfo does not need to store the same information internally. This may soon go, depending on how useful controller.py turns out to be.
Removed {add,get}_{config,device}_handler in favour of using a simple dictionary directly. Fix a misnamed variable blconfig that was supposed to refer to blcfg. This showed up under pylint as a undefined variable, but would have manifested itself in the bootloader configuration being ignored.
Newer binutils is a bit stricter and errors out when you try
to use movl on a 16 bit word on x86_64. Using just a "mov"
compiles fine and should result in the same code.
{standard input}: Assembler messages:
{standard input}:2138: Error: suffix or operands invalid for `mov'
{standard input}:2140: Error: suffix or operands invalid for `mov'
{standard input}:2142: Error: suffix or operands invalid for `mov'
{standard input}:2144: Error: suffix or operands invalid for `mov'
domain_crash_synchronous() on x86_64 causes Xen to crash because
it tries to dereference an invalid stack address. The patch below
fixes this. The patch also updates show_registers() to print the
same information as its x86_32 equivalent.
Signed-off-by: Leendert van Doorn <leendert@watson.ibm.com> Signed-off-by: Keir Fraser <keir@xensource.com>
Prevent opening the xenbus device if the store isn't connected yet.
Running xenstore clients using the xenbus device before the store
connection has been set up causes a crash because the store page
won't have been allocated yet. This is only a problem in dom0 where
we setup the store page from the PRIVCMD_INITDOMAIN_STORE ioctl. Signed-off-by: Christian Limpach <Christian.Limpach@cl.cam.ac.uk>
(1) Make TESTDIR relative (my directory exceeded 108 chars, breaking sockets)
(2) Make TESTDIR if it doesn't exist
(3) Add dummy xc_domain_getinfo and xc_evtchn_bind_virq for fake libxc
(4) Fix tests broken by b594bb976a743d509f1ffabb5bc698874ab90d8f
(5) domain_cleanup() can be static, as it's not used elsewhere.
(6) With -Werror, "use" unused variable in domain_init() if TESTING
(7) Remove debugging printf on watch without perms.
(8) Loosen timeout in xs_test (valgrind + slow machine == bogus timeouts)
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (authored) Signed-off-by: Christian Limpach <Christian.Limpach@cl.cam.ac.uk>